强!ACL2023 | 中科院,针对NL2Code任务,调研了27个大模型,并指出5个重要挑战
引言
对于NL2Code任务相信大家都不陌生。它主要目的就是将自然语言转换成可执行代码来提高开发人员的工作效率,终极目标就是干翻所有程序员,最近,随着大模型的出现,距离这一天又稍稍进了一步。基于该背景,分享中科院在ACL2023国际顶会上一篇文章:他们调研了NL2Code领域中的「27个大型语言模型以及相关评价指标」,分析了「LLMs的成功在于模型参数、数据质量和专家调优」,并指出了「NL2Code领域研究的5个机遇挑战」,最后作者建立了一个分享网站来跟踪LLMs在NL2Code任务上的最新进展。https://nl2code.github.io
背景介绍
新手程序员,甚至是那些没有任何编程经验的程序员,是否有可能仅仅通过用自然语言描述他们的需求来创建软件?实现这一设想将对我们的生活、教育、经济和劳动力市场产生前所未有的影响。自然语言-代码(NL2Code)因其广阔的应用场景,是一项重要的研究任务,在学术界和工业界都引起了广泛的兴趣。
关于NL2Code的发展,其实和自然语言理解的发展类似,一开始,基本都是基于专家规则进行算法设计,但是此类方法需要对不同编程语言进行设计,泛化性差;随着技术发展,人们逐步开始使用静态语言模型,并使用向量空间来描述文字,此类方法在初期一般向量空间比较稀疏,不能建立长期的依赖关系;再后来,就用到了我们比较熟悉的神经网络,例如CNN、RNN、LSTM,此类方法通过标记数据进行训练来构建自然语言(NL)和代码(Code)之间的关系,但实际效果对NL2Code任务的能力有限;现在,在ChatGPT风靡全球的背景下,越来越多的大型语言模型(LLMs)如雨后春笋一样出现,通过语言指令,它们可以在零样本状况下生成代码,并在NL2Code任务上中取到了惊人的成绩。具有标志性的一个LLM模型就是Codex,它拥有120亿个参数,在Python编程任务上测试,可解决72.31%的问题,并且该模型已经商用可在实践中提高开发人员的工作效率。
NL2Code任务与27个LLMs
对于NL2Code任务,其主要目的是基于给定自然语言问题描述生成所需要的代码。以下是一个关于Python编程问题的示例。其中灰色块部分表示问题描述,绿色块部分表示模型生成代码,黄色块部分表示测试样例。
27个LLMs评估
上面总结了NL2Code现有的大型语言模型(LLMs),但是这些模型在架构、模型规模等方面各不相同,无法进行统一的评估。为此,作者在HumanEval基准上进行了Zero-shot统一评估,其中HumanEval基准由164个手写的Python编程问题组成,对于每个编程问题都提供了测试用例,以评估生成代码正确性。使用pass@k作为评估指标,即通过k次尝试可以正确回答的问题的比例。下表显示根据模型大小进行分组,在该测试集上的测试结果。
模型大小
根据前面的整理用于NL2Code的LLMs时间发展图可以发现,只要模型参数越多性能就越好。为了进一步说明模型参数大小和模型效果之间的关系,作者整理了10个比较有代表性的模型,在HumanEval基准上的pass@1结果,如下图所示:
数据质量
随着LLMs模型参数的增加,其训练数据规模也在不断的增加。这在数据选择和预处理方面也有更高的要求。早期的模型,例如CodeSearchNet、CoST、XLCoST等都是基于人工标注数据对进行训练(耗时耗力);GPT系列模型(GPT-3 、GPT-Neo、GPT-J )开始在大规模无监督数据集上进行训练,但是由于代码数据限制,并没有显示出很强的代码生成能力。由于LLMs模型的出现,它们可以在更大规模的未标记代码数据集上进行训练,最终模型效果惊人。
在惊叹于LLMs效果的同时,也要知道LLMs在训练之前通常会对数据进行预处理。为此作者调研了Codex、AlphaCode、CodeGen、InCoder和PyCodeGPT等5个强大模型的数据预处理方法。发现它们具有几个共同的特点:一是删除可能自动生成或未完成的代码文件,二是使用特定的规则来过滤不常见的代码文件。「总之,这些预处理策略的目标是实现一个不重复的、完整的、正确的、干净的和通用的代码语料库」。
专家调优
训练一个优秀的模型需要认真考虑模型训练阶段的各个参数。通过对27个LLMs模型的研究发现,它们都有一些共同的设置,比如都应用了Adam相关优化器并在初始化阶段相差不大。除此之外,还有需要调节的超参数,如lr、batch、窗口大小、预热、梯度累积和temperature。对于学习率来说,随着模型的增大,学习率会逐步变小。如下图所示:
评估基准指标
「对NL2Code任务的评估,高质量的基准和可靠的度量是基础和必要的」。作者总结了17个NL2Code基准测试,每个基准测试在大小、语言、复杂性和场景方面都有自己的特点,如下表所示。
NL2Code挑战与机遇
大预言模型在NL2Code的应用对学术界和工业界都有相当大的影响。虽然取得了惊人的进展,但仍然有很多挑战需求解决,这也为研究人员提供了充足的机会。下面作者总结了 NL2Code任务的五个挑战和机会。
「1、理解能力」:人类能够理解不同抽象层次的各种描述, 相比之下,当前的 LLM 往往对给定的上下文敏感,这可能会导致性能下降。作者认为探索LLM的理解能力是一个重要的研究方向。
「2、判断能力」:人类能够判定一个编程问题是否被解决。当前模型不论输入什么都会给出答案,而且该答案正确与否都不能确定,这在实际应用中会存在一定的问题。目前为了提高LLM的判断能力,需要根据用户反馈采用强化学习的方式进行调优。作者认为探索LLM自我判断能力,也是一个比较重要的研究方向。
「3、解释能力」:人类开发人员能够解释他们编写的代码,这对教育的和软件维护至关重要。最近的研究表明,LLM 具有自动生成代码解释的潜力。作者认为针对该能力也需要进一步的研究和探索,以充分发挥LLM在这方面的潜力。
「4、自适应能力」:当前的大型语言模型与人类之间的一个根本区别是它们适应新知识和更新知识的能力。人类开发人员能够根据文档资料实现API的快速开发,而LLM需要大量的知识和训练。作者认为如何提高LLM快速自学习能力也是一个比较大挑战。
「5、多任务处理能力」:LLM在多任务处理方面与人类存在较大差异。人类可以在任务之间无缝切换,而LLM可能需要复杂的提示工程。为此作者任务提升LLM多任务能力同样是一个重要的研究方向。
推荐阅读
[6]MPT-7B:可商用的开源模型,效果堪比LLaMA-7B